/***********************************************************************************
 * 文件名： ui_ctrl.c
 * 版本： 1
 * 说明：
 * 		UI控制器，处理UI的切换、提供定时器。
 * 修改记录：
 * 	2024/01/10: 初版。 刘言。
***********************************************************************************/
#include "ui_ctrl.h"
#include "app_config.h"

polsys_task_t PublicTimer;

static ui_page_base_t * mNowPage;

void Ui_Init()
{
    Polsys_InitTask(&PublicTimer, NULL, POLSYS_WAITING_FOREVER);
    // 切换到 页面
    // Ui_Load(Page_CreatLogo, NULL);
}

void Ui_LoadDefaultPage()
{
    if(mNowPage == NULL)
    {
        Ui_Load(Page_CreatLogo, NULL);
    }
    else
    {
        Ui_SwitchToPage(Page_CreatLogo, NULL);
    }
}

void Ui_Load(ui_page_creat_fun_t creat_fun, void *param)
{
    mNowPage = creat_fun(param);
    if(mNowPage->CallBack)
    {
        ui_ev_t e;
        e.Code = UI_EV_PAGE_LOADED;
        e.Target = mNowPage;
        e.UserData = mNowPage->UserData;
        mNowPage->CallBack(&e);
    }
}

void Ui_Clear()
{
    if(mNowPage)
    {
        if(mNowPage->CallBack)
        {
            ui_ev_t e;
            e.Code = UI_EV_PAGE_UNLOADED;
            e.Target = mNowPage;
            e.UserData = mNowPage->UserData;
            mNowPage->CallBack(&e);
        }
        if(mNowPage->DeleteFun)mNowPage->DeleteFun(mNowPage);
        else free(mNowPage);
        mNowPage = NULL;
    }
}

void Ui_SwitchToPage(ui_page_creat_fun_t creat_fun, void *param)
{
    // 清除当前页面，腾出内存空间
    Ui_Clear();
    // 创建并加载新页面
    Ui_Load(creat_fun, param);
}

void Ui_NotifyEvent(ui_ev_code_t ev_code)
{
    if(mNowPage)
    {
        if(mNowPage->CallBack)
        {
            ui_ev_t e;
            e.Code = ev_code;
            e.Target = mNowPage;
            e.UserData = mNowPage->UserData;
            mNowPage->CallBack(&e);
        }
    }
}

inline ui_page_base_t *Ui_GetNowPage()
{
    return mNowPage;
}


